package org.idea.qiyu.framework.nacos.starter.client;

import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;
import org.idea.qiyu.framework.nacos.starter.bean.ModifyNacosPropertiesBean;

import java.util.Map;

/**
 * @Author linhao
 * @Date created in 12:27 下午 2021/8/23
 */
public interface INacosClientService {

    /**
     * 获取指定key的配置属性
     *
     * @param key
     * @param dataId
     * @param namespace
     * @param groupId
     * @return
     */
    String getProperty(String key,String dataId,String namespace,String groupId) throws NacosException;

    /**
     * 获取一份配置文件内部的所有属性
     *
     * @param dataId
     * @param namespace
     * @param groupId
     * @return
     */
    Map<String,String> getAllProperty(String dataId,String namespace,String groupId) throws NacosException;


    /**
     * 添加Nacos中的某项配置
     *
     * @param modifyNacosPropertiesBean
     * @return
     */
    boolean addProperties(ModifyNacosPropertiesBean modifyNacosPropertiesBean) throws NacosException;

    /**
     * 发布一份配置（如果已存在则更新）
     * 注意：这个函数会触发全量属性的更新
     *
     * @param dataId
     * @param groupId
     * @param namespace
     * @param content 写入的属性内容
     * @return
     */
    boolean publishConfig(String dataId,String groupId,String namespace,String content) throws NacosException;


    /**
     * 移除Nacos中的某项配置
     *
     * @param modifyNacosPropertiesBean
     * @return
     */
    boolean removeProperties(ModifyNacosPropertiesBean modifyNacosPropertiesBean) throws NacosException;

    /**
     * 移除配置
     * 整个配置项移除
     *
     * @param dataId
     * @param groupId
     * @param namespace
     * @return
     */
    boolean removeHoldConfig(String dataId,String groupId,String namespace) throws NacosException;


    /**
     * 添加监听器 新增监听器之后每次配置属性发生修改就会将所有属性返回
     *
     * @param dataId
     * @param groupId
     * @param namespace
     * @return
     */
    boolean addListener(String dataId, String groupId, String namespace, Listener listener);

}
